/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.financeiro.filter;

import br.jm.financeiro.base.eao.EaoException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import net.sf.trugger.element.Element;
import net.sf.trugger.element.Elements;
import static net.sf.trugger.scan.ClassScan.findClasses;
import net.sf.trugger.scan.ClassScanningException;

/**
 *
 * @author joao
 */
public class Configuracao {

    private Map<String, String> camposMap;
    private Map<String, String> camposMapType;
    public static HashMap<String, Map> tabelasMap;
    private Column annotation;
    private ConfiguraCampoAnnotation configuraCampo;
    private String nomeColuna;
    private String nomeEntidade;
    private String type;
    private String cNomMap;
    private String cNomMapType;
    private String cNomeTabela;
    private String nomeTabelaJoin;

    public Configuracao() {
    }

    public void gravaObjeto() throws EaoException {
        try {
            //ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("configuration.bin"));
            Set<Class> classes = findClasses().recursively().annotatedWith(Entity.class).in("br.jm.financeiro.entity");
            Object[] nomeEntidades = classes.toArray();
            tabelasMap = new HashMap<>();
            for (Object nomeEntidade1 : nomeEntidades) {
                Set<Element> columns = Elements.elements().annotatedWith(Column.class).in(nomeEntidade1);
                Set<Element> columnsConfigura = Elements.elements().annotatedWith(ConfiguraCampoAnnotation.class).in(nomeEntidade1);
                cNomMap = nomeEntidade1.toString().replace("class br.jm.financeiro.entity.", "");
                cNomMapType = cNomMap.concat("Type");
                camposMap = new HashMap<>();
                camposMapType = new HashMap<>();
                if (columnsConfigura.size() > 0) {
                    for (Element element : columnsConfigura) {
                        configuraCampo = element.getAnnotation(ConfiguraCampoAnnotation.class);

                        nomeTabelaJoin = configuraCampo.nomeTabelJoin();
                        nomeColuna = nomeTabelaJoin.concat(".").concat(configuraCampo.campo());
                        nomeEntidade = configuraCampo.pesquisa();
                        type = configuraCampo.tipo();

                        camposMap.put(nomeEntidade, nomeColuna);
                        camposMapType.put(nomeEntidade, type);
                    }
                }
                for (Element element : columns) {
                    annotation = element.getAnnotation(Column.class);

                    nomeColuna = annotation.name();
                    nomeEntidade = element.name();
                    type = element.type().toString();

                    if (!camposMap.containsKey(nomeEntidade)) {
                        camposMap.put(nomeEntidade, nomeColuna);
                        camposMapType.put(nomeEntidade, type);
                    }
                }
                camposMap.put(cNomMap, retornaSql(cNomMap));
                camposMap.put("Order", retornaOrder(cNomMap));
                tabelasMap.put(cNomMap, camposMap);
                tabelasMap.put(cNomMapType, camposMapType);
            }
            /*
             * out.writeObject(tabelasMap); out.flush(); out.close();
             *
             */
        } catch (ClassScanningException e) {
        }
    }
    /*
     * public Map leObjeto(String cCampo) throws FileNotFoundException,
     * IOException { HashMap<String, Map> obj = null; try { ObjectInputStream in
     * = new ObjectInputStream(new FileInputStream("configuration.bin")); obj =
     * (HashMap<String, Map>) in.readObject(); camposMap = obj.get(cCampo);
     * in.close(); } catch (Exception e) { e.printStackTrace(); }
     *
     * return camposMap; }
     *
     * public Map leObjetoType(String cCampo) throws FileNotFoundException,
     * IOException { HashMap<String, Map> obj = null; try { ObjectInputStream in
     * = new ObjectInputStream(new FileInputStream("configuration.bin")); obj =
     * (HashMap<String, Map>) in.readObject(); camposMapType = obj.get(cCampo);
     * in.close(); } catch (Exception e) { e.printStackTrace(); }
     *
     * return camposMapType; }
     *
     *
     */

    private String retornaSql(String cTabela) {
        String cSql = null;
        switch (cTabela) {
            case "Banco":
                cSql = "SELECT id_banco,numero,nom_Banco,link "
                        + "FROM banco ";
                break;
            case "CepEndereco":
                cSql = "SELECT cep_endereco.cod_logradouro,cep_endereco.dsc_complemento,cep_endereco.dsc_logradouro,cep_endereco.num_cep, "
                        + "cep_bairro.cod_bairro,cep_bairro.dsc_bairro,cep_cidade.cod_cidade, "
                        + "cep_cidade.cep,cep_cidade.dsc_cidade,cep_cidade.cod_municipio,cep_uf.cod_uf, "
                        + "cep_uf.dsc_estado "
                        + "FROM cep_endereco, cep_bairro, cep_cidade, cep_uf "
                        + "WHERE cep_endereco.cod_bairro = cep_bairro.cod_bairro AND cep_bairro.cod_cidade = cep_cidade.cod_cidade "
                        + "AND cep_cidade.cod_uf = cep_uf.cod_uf ";
                break;
            case "Departamento":
                cSql = "select departamento.id_departamento,departamento.dsc_departamento "
                        + "from departamento ";
                break;
            case "CodigoDdd":
                cSql = "SELECT id_ddd,codigo,localidade,municipio,sigla,cep_uf.cod_uf, cep_uf.dsc_estado "
                        + "FROM codigo_ddd , cep_uf "
                        + "where codigo_ddd.cod_uf = cep_uf.cod_uf ";
                break;
            case "Usuario":
                cSql = "select id_usuario,dsc_email,dsc_pergunta,dsc_resposta,dsc_thema,nom_usuario,usr_name,usr_password, "
                        + "tip_status, tip_usuario, finaliza, csistema, cusuario "
                        + "FROM usuario ";
                break;
            case "Modulo":
                cSql = "select id_modulo,dsc_modulo,dsc_pagina,num_nivel "
                        + "FROM modulo ";
                break;
            case "UsuarioModulo":
                cSql = "select id_modulo,id_usuario "
                        + "FROM usuario_modulo ";
                break;
            case "TipoBaixa":
                cSql = "SELECT id_baixa,dsc_baixa "
                        + "from tipo_baixa ";
                break;
            case "CentroCusto":
                cSql = "select centro_custo.id_custo, centro_custo.dsc_custo, centro_custo.tip_status "
                        + "from centro_custo ";
                break;
            case "PlanosGrupos":
                cSql = "select id_grupo_conta,nivel1,nivel2,nivel3,nivel4,nivel5,nivel6,nivel7,nivel8,nivel9,nivel10,"
                        + "nome,descricao,mascara "
                        + "from planos_grupos ";
                break;
            case "CepBairro":
                cSql = "SELECT cep_bairro.cod_bairro,cep_bairro.dsc_bairro,cep_cidade.cod_cidade, "
                        + "cep_cidade.cep,cep_cidade.dsc_cidade,cep_cidade.cod_municipio,cep_uf.cod_uf, "
                        + "cep_uf.dsc_estado "
                        + "FROM cep_bairro, cep_cidade, cep_uf "
                        + "WHERE cep_bairro.cod_cidade = cep_cidade.cod_cidade AND cep_cidade.cod_uf = cep_uf.cod_uf ";
                break;
            case "Moeda":
                cSql = "SELECT id_moeda,nom_moeda,sigla,cotacao,data_cotacao "
                        + "FROM moeda ";
                break;
            case "CepUf":
                cSql = "SELECT  cod_uf, dsc_estado "
                        + "FROM cep_uf ";
                break;
            case "PlanoContas":
                cSql = "select plano_contas.id_plano_conta,plano_contas.nivel1,plano_contas.nivel2,plano_contas.nivel3,plano_contas.nivel4,"
                        + "plano_contas.nivel5,plano_contas.nivel6,plano_contas.nivel7,plano_contas.nivel8,plano_contas.nivel9,plano_contas.nivel10,"
                        + "plano_contas.reduzido, "
                        + "plano_contas.nome,plano_contas.descricao,plano_contas.saldoanterior,plano_contas.debitos,plano_contas.creditos,"
                        + "plano_contas.saldoatual,plano_contas.tip_conta,plano_contas.id_grupo_conta,plano_contas.num_conta, "
                        + "planos_grupos.id_grupo_conta,planos_grupos.nivel1,planos_grupos.nivel2,planos_grupos.nivel3,planos_grupos.nivel4,"
                        + "planos_grupos.nivel5,planos_grupos.nivel6,planos_grupos.nivel7,planos_grupos.nivel8,planos_grupos.nivel9,"
                        + "planos_grupos.nivel10,planos_grupos.nome,planos_grupos.descricao,planos_grupos.mascara "
                        + "from plano_contas, planos_grupos "
                        + "where plano_contas.id_grupo_conta = planos_grupos.id_grupo_conta ";
                break;
            case "TipoDocumento":
                cSql = "SELECT id_Documento,dsc_Documento, tip_documento "
                        + "FROM tipo_Documento ";
                break;
            case "CepCidade":
                cSql = "SELECT cep_cidade.cod_cidade,cep_cidade.cep,cep_cidade.dsc_cidade,cep_cidade.cod_municipio,cep_uf.cod_uf,cep_uf.dsc_estado "
                        + "FROM cep_cidade , cep_uf "
                        + "WHERE cep_cidade.cod_uf = cep_uf.cod_uf ";
                break;
            case "CodigoDdi":
                cSql = "SELECT id_ddi,ddi,descricao "
                        + "FROM codigo_ddi ";
                break;
            case "Categoria":
                cSql = "SELECT id_categoria,dsc_categoria,tip_categoria, "
                        + "CASE WHEN tip_categoria = 1 THEN 'Cliente-Fornecedor' "
                        + "WHEN tip_categoria = 2 THEN 'Serviço' "
                        + "WHEN tip_categoria = 3 THEN 'Produto' "
                        + "END AS dscTipCategoria "
                        + "FROM categoria ";
                break;
            case "TipoConta":
                cSql = "SELECT id_tipo,dsc_tipo "
                        + "FROM tipo_conta ";
                break;
            case "FormaPagamento":
                cSql = "SELECT id_Pagamento,dsc_Pagamento "
                        + "FROM Forma_Pagamento ";
                break;
            case "ContaReceber":
                cSql = "SELECT id_receber,dat_emissao,conta_receber.dsc_obs,dsc_receber,num_documento,per_juros,tip_juros,vlr_desconto,vlr_multa,vlr_receber,"
                        + "conta_receber.id_cliente,conta_receber.id_custo, conta_receber.id_empreendimento, conta_receber.num_os, conta_receber.id_empresa "
                        + "from conta_receber inner join cliente on conta_receber.id_cliente = cliente.id_cliente "
                        + "inner join centro_custo on conta_receber.id_custo = centro_custo.id_custo "
                        + "inner join empresa on conta_receber.id_empresa = empresa.id_empresa ";
                break;
            case "ContaPagar":
                cSql = "SELECT id_pagar,dat_emissao,conta_pagar.dsc_obs,dsc_pagar,num_documento,per_juros,tip_juros,vlr_desconto,vlr_multa,"
                        + "vlr_pagar,conta_pagar.id_custo,conta_pagar.id_fornecedor, conta_pagar.num_os, conta_pagar.id_empresa "
                        + "from conta_pagar inner join fornecedor on conta_pagar.id_fornecedor = fornecedor.id_fornecedor "
                        + "inner join empresa on conta_pagar.id_empresa = empresa.id_empresa "
                        + "inner join centro_custo on conta_pagar.id_custo = centro_custo.id_custo ";
                break;
            case "ContaBancaria":
                cSql = "SELECT conta_bancaria.id_conta,conta_bancaria.dsc_conta,conta_bancaria.dat_abertura,conta_bancaria.nom_titular,"
                        + "conta_bancaria.vlr_saldo_inicial,conta_bancaria.id_tipo,conta_bancaria.id_banco, "
                        + "conta_bancaria.num_agencia,conta_bancaria.num_conta,conta_bancaria.id_moeda,conta_bancaria.limite_credito,"
                        + "conta_bancaria.dat_limite_credito,conta_bancaria.tip_status, "
                        + "conta_bancaria.nom_contato,conta_bancaria.tip_telefone1,conta_bancaria.num_telefone1,conta_bancaria.tip_telefone2,conta_bancaria.num_telefone2, "
                        + "conta_bancaria.tip_telefone3,conta_bancaria.num_telefone3,conta_bancaria.dsc_email,conta_bancaria.dsc_obs,"
                        + "tipo_conta.dsc_tipo, banco.nom_banco,banco.link,banco.numero,moeda.cotacao,moeda.data_cotacao,moeda.nom_moeda,moeda.sigla "
                        + "FROM conta_bancaria, tipo_conta, banco, moeda "
                        + "WHERE conta_bancaria.id_tipo = tipo_conta.id_tipo and conta_bancaria.id_banco = banco.id_banco "
                        + "and conta_bancaria.id_moeda = moeda.id_moeda ";
                break;
            case "Cliente":
                cSql = "SELECT id_cliente,tip_cliente,nom_cliente,dat_nasc_abert,tip_sexo, "
                        + "dsc_email,dsc_site,dsc_historico,dsc_obs,categoria.id_categoria, categoria.dsc_categoria, nom_fantasia, sta_cliente, "
                        + "CASE WHEN tip_cliente = 'F' THEN CPF_formatar(num_cpf) "
                        + "WHEN tip_cliente = 'J' THEN cnpj_formatar(num_cpf) "
                        + "END AS num_cpf "
                        + "FROM cliente, categoria "
                        + "WHERE cliente.id_categoria = categoria.id_categoria ";
                break;
            case "ClienteEndereco":
                cSql = "SELECT id_endereco,tip_endereco,dsc_endereco,cod_logradouro, "
                        + "dsc_complemento,num_endereco,id_cliente "
                        + "FROM cliente_endereco ";
                break;
            case "ClienteEnderecoTelefone":
                cSql = "SELECT id_telefone,id_endereco,id_cliente,tip_telefone, "
                        + "id_ddi,id_ddd,dsc_telefone,num_telefone,num_ramal "
                        + "FROM cliente_endereco_telefone ";
                break;
            case "Processo":
                cSql = "SELECT id_processo,com_data,com_numero,com_texto,dat_update,dsc_obs,emp_color,loc_bairro,loc_dat_desde, "
                        + "loc_descricao,loc_email,loc_endereco,loc_funciionario,loc_ramal,loc_rf,loc_telefone,loc_transito,loc_unidade, "
                        + "proc_assunto,proc_interessado,proc_motivo,sit_comunique,sit_data_situacao,sit_descricao,sit_despacho,sit_dom, "
                        + "sit_situacao_data_descricao,sit_vencimento,id_empreendimento_lote, dat_atendido,dat_prorrogacao1,dat_prorrogacao2, "
                        + "dat_prorrogacao3,dat_concessao1,dat_concessao2,dat_concessao3, des_descricao,des_despacho,des_data,des_motivo, num_triunfo "
                        + "FROM processo ";
                break;
            case "ProcessoMorto":
                cSql = "SELECT id_processo,com_data,com_numero,com_texto,dat_update,dsc_obs,emp_color,loc_bairro,loc_dat_desde, "
                        + "loc_descricao,loc_email,loc_endereco,loc_funciionario,loc_ramal,loc_rf,loc_telefone,loc_transito,loc_unidade, "
                        + "proc_assunto,proc_interessado,proc_motivo,sit_comunique,sit_data_situacao,sit_descricao,sit_despacho,sit_dom, "
                        + "sit_situacao_data_descricao,sit_vencimento,id_empreendimento_lote, dat_atendido,dat_prorrogacao1,dat_prorrogacao2, "
                        + "dat_prorrogacao3,dat_concessao1,dat_concessao2,dat_concessao3, des_descricao,des_despacho,des_data,des_motivo, num_triunfo "
                        + "FROM processomorto ";
                break;
            case "ProcessoSituacao":
                cSql = "SELECT processo_situacao.id_situacao,processo_situacao.ass_descricao,processo_situacao.ass_situacao,"
                        + "processo_situacao.ass_tipo,processo_situacao.ass_data, processo_situacao.ass_color "
                        + "FROM processo_situacao ";
                break;
            case "Empreendimento":
                cSql = "SELECT empreendimento.id_empreendimento,empreendimento.dsc_empreendimento,empreendimento.id_cliente, "
                        + "empreendimento.emp_color,empreendimento.num_cpf_empreendimento,empreendimento.tip_empreendimento, empreendimento.dat_update, "
                        + "empreendimento.sta_Empreendimento, empreendimento.dsc_raz_nome, empreendimento.nom_tecnico, empreendimento.dpt_responsavel, "
                        + "empreendimento.nom_arquiteto, empreendimento.id_custo, empreendimento.emp_err, "
                        + "cliente.nom_cliente,cliente.num_cpf,cliente.dsc_email,cliente.dat_nasc_abert, "
                        + "cliente.dsc_historico,cliente.dsc_obs,cliente.tip_sexo, "
                        + "cliente.dsc_site,cliente.tip_cliente,cliente.id_categoria,cliente.nom_fantasia, "
                        + "emp_ass,emp_com,emp_des,emp_loc,emp_proc,emp_sit, empreendimento.tip_prioridade "
                        + "FROM empreendimento INNER JOIN cliente ON empreendimento.id_cliente = cliente.id_cliente ";
                break;
            case "EmpreendimentoLote":
                cSql = "SELECT id_empreendimento_lote,dsc_assunto,num_processo,status,tip_prioridade_lote,id_empreendimento,dat_update_lote,dat_processo, dsc_orgao, "
                        + "emp_color, tip_status, tip_status_sinal, dsc_id_lote, dpt_responsavel, nom_tecnico, dsc_diagnostico, "
                        + "empreendimento_lote.id_assunto, status_anterior,tip_status_anterior, tip_status_sinal_anterior, empreendimento_lote.dsc_obs "
                        + "FROM empreendimento_lote INNER JOIN assunto ON empreendimento_lote.id_assunto = assunto.id_assunto ";
                break;
            case "ViewEmail":
                cSql = "SELECT name,complemento,email "
                        + "FROM view_email ";
                break;
            case "Fornecedor":
                cSql = "SELECT id_fornecedor,tip_fornecedor,nom_fornecedor,dat_nasc_abert,tip_sexo, "
                        + "dsc_email,dsc_site,dsc_historico,dsc_obs,categoria.id_categoria, categoria.dsc_categoria, nom_fantasia, "
                        + "CASE WHEN tip_fornecedor = 'F' THEN CPF_formatar(num_cpf) "
                        + "WHEN tip_fornecedor = 'J' THEN cnpj_formatar(num_cpf) "
                        + "END AS num_cpf "
                        + "FROM fornecedor, categoria "
                        + "WHERE fornecedor.id_categoria = categoria.id_categoria ";
                break;
            case "FornecedorEndereco":
                cSql = "SELECT id_endereco,tip_endereco,dsc_endereco,cod_logradouro, "
                        + "dsc_complemento,num_endereco,id_fornecedor "
                        + "FROM fornecedor_endereco ";
                break;
            case "FornecedorEnderecoTelefone":
                cSql = "SELECT id_telefone,id_endereco,id_fornecedor,tip_telefone, "
                        + "id_ddi,id_ddd,dsc_telefone,num_telefone,num_ramal "
                        + "FROM fornecedor_endereco_telefone ";
                break;
            case "ControleBancario":
                cSql = "SELECT id_controle,tip_controle,dsc_controle,dat_controle,vlr_saldo_inicial,vlr_credito,"
                        + "vlr_debito,id_custo,id_plano_conta,id_conta,vlr_saldo_final,num_documento "
                        + "FROM controle_bancario ";
                break;
            case "PropostaEmail":
                cSql = "SELECT id_email,dsc_email,email "
                        + "FROM proposta_email ";
                break;
            case "PropostaProcuracao":
                cSql = "SELECT id_procuracao,dsc_procuracao,procuracao "
                        + "FROM proposta_procuracao ";
                break;
            case "OrgaoDocumento":
                cSql = "SELECT id_orgao,dsc_orgao,dsc_assunto "
                        + "FROM orgao_documento ";
                break;
            case "PropostaEtapa":
                cSql = "SELECT id_etapa,nom_etapa "
                        + "FROM proposta_etapa ";
                break;
            case "PropostaEtapaDesc":
                cSql = "SELECT id_etapa_desc,dsc_etapa1,dsc_etapa2,num_etapa,num_etapa_compl,obs_etapa1,obs_etapa2,id_etapa "
                        + "FROM proposta_etapa_desc ";
                break;
            case "PropostaEtapaPerc":
                cSql = "SELECT id_etapa_perc,dsc_perc,perc_etapa,id_etapa_desc "
                        + "FROM proposta_etapa_perc ";
                break;
            case "PropostaModelo":
                cSql = "SELECT id_modelo,dsc_modelo,modelo, id_etapa "
                        + "FROM proposta_modelo ";
                break;
            case "ViewAcompanhamentoProcesso":
                cSql = "SELECT id_processo,id_empreendimento_lote,nom_fantasia,dsc_empreendimento,num_processo,loc_dat_desde, "
                        + "dsc_assunto,dscidlote,loc_unidade,dsc_orgao,sit_descricao,loc_funciionario,nom_tecnico,dsc_obs,dpt_responsavel,dat_update, loc_transito "
                        + "FROM view_acompanhamento_processo ";
                break;
            case "Proposta":
                cSql = "SELECT proposta.id_proposta,proposta.dat_proposta,proposta.dsc_email,proposta.dsc_proposta,proposta.tip_status,"
                        + "proposta.id_empreendimento,proposta.id_cliente,proposta.nom_empreendimento, proposta.cor_status, dsc_cor_status, dat_fechamento, "
                        + "proposta.modelo,proposta.nom_arquivo,proposta.dsc_modelo,proposta.id_modelo,proposta.num_proposta,proposta.ord_obs,"
                        + "proposta.id_empresa,proposta.dat_os,proposta.num_os, proposta.custoiss, proposta.totalbruto, proposta.totaletapa, proposta.totalliquido, proposta.totalrecebido, "
                        + "proposta.totalreceber, empreendimento.id_custo, empreendimento.id_empreendimento,empreendimento.dsc_empreendimento,empreendimento.emp_color,empreendimento.num_cpf_empreendimento,"
                        + "empreendimento.tip_empreendimento,empreendimento.id_cliente,empreendimento.dat_update,empreendimento.emp_ass, "
                        + "empreendimento.emp_com,empreendimento.emp_des,empreendimento.emp_loc,empreendimento.emp_proc,empreendimento.emp_sit,empreendimento.dsc_raz_nome,"
                        + "empreendimento.nom_tecnico,empreendimento.dpt_responsavel,empreendimento.sta_empreendimento,empreendimento.nom_arquiteto,empreendimento.tip_prioridade, "
                        + "cliente.id_cliente,cliente.nom_cliente,cliente.num_cpf,cliente.dsc_email,cliente.dat_nasc_abert,cliente.dsc_historico,cliente.dsc_obs,"
                        + "cliente.tip_sexo,cliente.dsc_site,cliente.tip_cliente,cliente.id_categoria,cliente.nom_fantasia,cliente.sta_cliente, "
                        + "empresa.nom_empresa,empresa.perc_cofins,empresa.perc_csl,empresa.perc_ir,empresa.perc_iss,empresa.perc_pis, empresa.base_calculo "
                        + "FROM proposta INNER JOIN cliente ON proposta.id_cliente = cliente.id_cliente "
                        + "INNER JOIN empreendimento on proposta.id_empreendimento = empreendimento.id_empreendimento "
                        + "INNER JOIN empresa on proposta.id_empresa = empresa.id_empresa ";
                break;
            case "TempAcompanhamento":
                cSql = "SELECT acompanhamento_id,nom_fantasia,dsc_empreendimento,num_processo,dsc_lote,dsc_orgao,id_usuario, "
                        + "sit_descricao,loc_funciionario,nom_tecnico,dsc_obs,dpt_responsavel,loc_dat_desde,dat_update, dsc_id_lote, id_empreendimento_lote, loc_transito "
                        + "FROM temp_acompanhamento ";
                break;
            case "Diagnostico":
                cSql = "SELECT id_diagnostico,dsc_diagnostico "
                        + "FROM diagnostico ";
                break;
            case "ProcessoDiagnosticoNivel1":
                cSql = "SELECT id_diagnostico_nivel1,dsc_diagnostico_nivel1,id_empreendimento_lote,tip_contratado,"
                        + "dat_aprovacao,tip_terceiro,dat_terceiro_aprovacao,tip_aplica "
                        + "FROM processo_diagnostico_nivel1 ";
                break;
            case "PropostaValor":
                cSql = "SELECT Proposta_valor.id_proposta_valor,Proposta_valor.dsc_etapa,Proposta_valor.id_proposta,"
                        + "Proposta_valor.dsc_assunto, Proposta_valor.vlr_etapa,Proposta_valor.num_etapa "
                        + "FROM Proposta_valor INNER JOIN proposta ON Proposta_valor.id_proposta = proposta.id_proposta "
                        + "INNER JOIN empresa ON proposta.id_empresa = empresa.id_empresa "
                        + "INNER JOIN cliente ON proposta.id_cliente = cliente.id_cliente "
                        + "INNER JOIN empreendimento ON proposta.id_empreendimento = empreendimento.id_empreendimento "
                        + "INNER JOIN centro_custo ON empreendimento.id_custo = centro_custo.id_custo ";
                break;
            case "PropostaValorPerc":
                cSql = "SELECT proposta_valor_perc.id_proposta_valor_perc,proposta_valor_perc.id_proposta_valor,"
                        + "proposta_valor_perc.dat_pagamento,proposta_valor_perc.dsc_empresa,proposta_valor_perc.dsc_nfe,"
                        + "proposta_valor_perc.dsc_perc,proposta_valor_perc.perc_etapa,proposta_valor_perc.vlr_proposta,"
                        + "proposta_valor_perc.num_ordem,proposta_valor_perc.dat_emissao,proposta_valor_perc.dat_venc_nota,"
                        + "proposta_valor_perc.vlr_custo_iss,proposta_valor_perc.vlr_liquido,proposta_valor_perc.vlr_pago,"
                        + "proposta_valor_perc.ord_status,proposta_valor_perc.vlr_imposto, proposta_valor_perc.vlr_multa, proposta_valor_perc.vlr_juros "
                        + "FROM Proposta_valor_perc INNER JOIN proposta_valor ON Proposta_valor_perc.id_proposta_valor = proposta_valor.id_proposta_valor "
                        + "INNER JOIN proposta ON Proposta_valor.id_proposta = proposta.id_proposta "
                        + "INNER JOIN empresa ON proposta.id_empresa = empresa.id_empresa "
                        + "INNER JOIN cliente ON proposta.id_cliente = cliente.id_cliente "
                        + "INNER JOIN empreendimento ON proposta.id_empreendimento = empreendimento.id_empreendimento "
                        + "INNER JOIN centro_custo ON empreendimento.id_custo = centro_custo.id_custo ";
                break;
            case "Empresa":
                cSql = "select id_empresa,nom_empresa,num_os,num_proposta,perc_cofins,perc_csl,perc_ir,perc_iss,perc_pis, "
                        + "perc_cofins_triunfo,perc_csl_triunfo,perc_ir_triunfo,perc_iss_triunfo,perc_pis_triunfo, tip_calculo_iss, "
                        + "perc_cofins_maior,perc_csl_maior,perc_ir_maior,perc_iss_maior,perc_pis_maior, base_calculo, perc_juros, perc_multa, "
                        + "perc_cofins_triunfo_maior,perc_csl_triunfo_maior,perc_ir_triunfo_maior,perc_iss_triunfo_maior,perc_pis_triunfo_maior, tip_calculo_iss_maior "
                        + "FROM empresa ";
                break;
            case "Assunto":
                cSql = "select assunto.id_assunto, assunto.dsc_assunto "
                        + "from assunto ";
                break;
            case "TituloRelatorio":
                cSql = "select Titulo_Relatorio.id_titulo, Titulo_Relatorio.dsc_titulo "
                        + "from Titulo_Relatorio ";
                break;
            case "LogSistema":
                cSql = "select log_sistema.id_log, log_sistema.dat_update "
                        + "from log_sistema ";
                break;
            case "LogSistemaDetalhe":
                cSql = "select log_sistema_detalhe.id_log_sistema,log_sistema_detalhe.dsc_sistema,log_sistema_detalhe.dsc_usuario,log_sistema_detalhe.id_log "
                        + "from log_sistema_detalhe ";
                break;
            case "ExportarExcel":
                cSql = "select exportar_excel.id_exportar, exportar_excel.id_proposta, exportar_excel.id_usuario "
                        + "FROM exportar_excel "
                        + "INNER JOIN proposta ON exportar_excel.id_proposta = proposta.id_proposta "
                        + "INNER JOIN cliente ON proposta.id_cliente = cliente.id_cliente "
                        + "INNER JOIN empreendimento on proposta.id_empreendimento = empreendimento.id_empreendimento "
                        + "INNER JOIN empresa on proposta.id_empresa = empresa.id_empresa ";
                break;
            case "ViewNota":
                cSql = "select dat_emissao,mesano,dsc_nfe,num_os,dat_pagamento,dsc_assunto,dsc_perc,perc_etapa,vlr_proposta,"
                        + "dat_venc_nota,vlr_liquido,vlr_pago,ord_status,tip_status,nom_cliente,nom_fantasia,num_cpf,"
                        + "dsc_empreendimento,num_cpf_empreendimento,nom_empresa, vlr_multa, vlr_juros "
                        + "FROM view_nota ";
                break;
        }
        return cSql;
    }

    private String retornaOrder(String cTabela) {
        String cOrder = null;
        switch (cTabela) {
            case "Banco":
                cOrder = " nom_Banco ";
                break;
            case "CepEndereco":
                cOrder = " num_cep ";
                break;
            case "Departamento":
                cOrder = " dsc_departamento ";
                break;
            case "CodigoDdd":
                cOrder = " codigo ";
                break;
            case "Usuario":
                cOrder = "nom_usuario";
                break;
            case "TipoBaixa":
                cOrder = " dsc_baixa ";
                break;
            case "CentroCusto":
                cOrder = " dsc_custo ";
                break;
            case "PlanosGrupos":
                cOrder = " id_grupo_conta ";
                break;
            case "CepBairro":
                cOrder = " dsc_bairro ";
                break;
            case "Moeda":
                cOrder = " nom_Moeda ";
                break;
            case "CepUf":
                cOrder = "cod_uf";
                break;
            case "PlanoContas":
                cOrder = " plano_contas.nivel1,plano_contas.nivel2,plano_contas.nivel3,plano_contas.nivel4,"
                        + "plano_contas.nivel5,plano_contas.nivel6,plano_contas.nivel7,plano_contas.nivel8,plano_contas.nivel9,plano_contas.nivel10 ";
                break;
            case "TipoDocumento":
                cOrder = " dsc_Documento ";
                break;
            case "CepCidade":
                cOrder = " dsc_cidade ";
                break;
            case "CodigoDdi":
                cOrder = " descricao ";
                break;
            case "Categoria":
                cOrder = " tip_categoria,dsc_categoria ";
                break;
            case "TipoConta":
                cOrder = " dsc_tipo ";
                break;
            case "FormaPagamento":
                cOrder = " dsc_Pagamento ";
                break;
            case "ContaReceber":
                cOrder = " dat_emissao ";
                break;
            case "ContaPagar":
                cOrder = " dat_emissao ";
                break;
            case "ContaBancaria":
                cOrder = " banco.nom_Banco ";
                break;
            case "Cliente":
                cOrder = " nom_fantasia ";
                break;
            case "ClienteEndereco":
                cOrder = " tip_Endereco, dsc_endereco ";
                break;
            case "ClienteEnderecoTelefone":
                cOrder = " tip_telefone, dsc_telefone ";
                break;
            case "Processo":
                cOrder = " processo.dat_update ";
                break;
            case "ProcessoMorto":
                cOrder = " processomorto.dat_update ";
                break;
            case "ProcessoSituacao":
                cOrder = " id_processo ";
                break;
            case "Empreendimento":
                cOrder = " empreendimento.tip_prioridade,empreendimento.dat_update ";
                break;
            case "EmpreendimentoCarga":
                cOrder = " tip_prioridade,empreendimento.dat_update ";
                break;
            case "EmpreendimentoLote":
                cOrder = " empreendimento_lote.dat_update_lote ";
                break;
            case "ViewEmail":
                cOrder = " complemento ";
                break;
            case "Modulo":
                cOrder = " num_nivel, dsc_modulo ";
                break;
            case "UsuarioModulo":
                cOrder = "id_usuario";
                break;
            case "Fornecedor":
                cOrder = " nom_fantasia ";
                break;
            case "FornecedorEndereco":
                cOrder = " tip_Endereco, dsc_endereco ";
                break;
            case "FornecedorEnderecoTelefone":
                cOrder = " tip_telefone, dsc_telefone ";
                break;
            case "ControleBancario":
                cOrder = " dsc_controle ";
                break;
            case "PropostaEmail":
                cOrder = " dsc_email ";
                break;
            case "PropostaProcuracao":
                cOrder = " dsc_procuracao ";
                break;
            case "OrgaoDocumento":
                cOrder = " dsc_orgao ";
                break;
            case "PropostaEtapa":
                cOrder = " nom_etapa ";
                break;
            case "PropostaModelo":
                cOrder = " dsc_modelo ";
                break;
            case "PropostaEtapaDesc":
                cOrder = " to_number(num_etapa,'99999'), num_etapa_compl ";
                break;
            case "ViewAcompanhamentoProcesso":
                cOrder = " dat_update desc, loc_dat_desde ";
                break;
            case "Proposta":
                cOrder = " empresa.nom_empresa, substring(proposta.num_proposta from "
                        + "5 for 4) asc, substring(proposta.num_proposta from "
                        + "1 for 3) ";
                break;
            case "TempAcompanhamento":
                cOrder = " nom_fantasia, dsc_orgao, nom_tecnico ";
                break;
            case "Diagnostico":
                cOrder = " dsc_diagnostico ";
                break;
            case "ProcessoDiagnosticoNivel1":
                cOrder = " id_diagnostico_nivel1 ";
                break;
            case "PropostaValor":
                cOrder = " dsc_etapa ";
                break;
            case "PropostaEtapaPerc":
                cOrder = " num_ordem ";
                break;
            case "Empresa":
                cOrder = " nom_empresa ";
                break;
            case "Assunto":
                cOrder = " dsc_assunto ";
                break;
            case "TituloRelatorio":
                cOrder = " dsc_titulo ";
                break;
            case "LogSistema":
                cOrder = " dat_update ";
                break;
            case "LogSistemaDetalhe":
                cOrder = " log_sistema_detalhe.id_log ";
                break;
            case "PropostaValorPerc":
                cOrder = " proposta_valor_perc.id_proposta_valor_perc ";
                break;
            case "ExportarExcel":
                cOrder = " exportar_excel.id_exportar ";
            case "ViewNota":
                cOrder = " mesano ";
        }

        return cOrder;
    }
    /*
     set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=true
     set JAVA_OPTS=%JAVA_OPTS% -Xms512M -Xmx1024M -XX:PermSize=128m -XX:MaxPermSize=256m
     */
}
